package com.hmall.api.config;


import feign.Logger;
import feign.RequestInterceptor;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.context.annotation.Bean;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import java.util.Enumeration;

/**
 * Feign客户端默认配置类
 * 用于配置Feign客户端的日志级别和请求拦截器
 */
public class DefaultFeignConfig {
    /**
     * 配置Feign客户端的日志级别
     * @return Logger.Level FULL级别，记录所有请求和响应的详细信息
     */
    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
    
    /**
     * 配置用户信息请求拦截器
     * 用于将当前请求的头部信息传递给下游服务
     * @return RequestInterceptor 请求拦截器
     */
    @Bean
    public RequestInterceptor userInfoRequestInterceptor() {
        // 返回一个请求模板拦截器，用于传递请求头信息
        return requestTemplate -> {
            // 获取当前请求的属性
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            // 获取当前HTTP请求
            HttpServletRequest request = requestAttributes.getRequest();

            // 获取所有请求头名称
            Enumeration headerNames = request.getHeaderNames();
            // 遍历所有请求头
            while (headerNames.hasMoreElements()) {
                String key =headerNames.nextElement().toString();
                String value = request.getHeader(key);

                // 跳过content-length头部，避免长度不匹配问题
                if ("content-length".equals(key)){
                    continue;
                }
                // 将请求头添加到Feign请求模板中
                requestTemplate.header(key,value);
            }
        };
    }
}